#!/usr/bin/python
# -*- coding: iso-8859-15 -*-

import commands
import re
from iwconfig import IwCfg
from iperf import Iperf
from iwlist2 import IwList
class Gestion:
    """
    classe intermediare entre l'IHM , la partie mesure , et la base de donnee
    pour la partie mesure : iwlist iwconfig et iperf
    pour l ihm reception des valeurs et traitement
    et pour la BDD stockage des différents resultat
    """
    def __init__(self,session):
        """Fonction d'initialisation
        """
        self.session=session
        self.su=[]
        self.u=""
        self.listdico=[]
        self.regex=""
        self.result_regex=""
        self.dico={}
    
        

    def iwc(self):
        """
        Appel de la classe IWcf qui lance un iwconfig
        """
        test= IwCfg("un")
        inter=self.interface()
        test.iwcfg(inter[0])
        resultat=test.iwcfg(inter[0])
        # retourne le resultat soit pour la BDD soit pour la creation de l image
        return resultat

    def interface(self):
        """
        Fonction recuperant automatiquement l'interface a utiliser
        """
        result=commands.getoutput('/sbin/iwconfig')
        regex=re.compile('([\w]{2,8}) *(.*)')
        result_regex=regex.findall(result)
        inter = ''
        for elem in result_regex:
            if elem[1]!='no wireless extensions.':
                regex=re.compile('([a-z]{2,4}\d{1})$')
                result_regex=regex.findall(elem[0])
                if result_regex!=[]:
                    inter=result_regex
        if not inter:
            inter = 'wlan0'
        return inter                

    def iwli(self):
        """
        On recupere l'interface et on l'utilise pour recuperer les cellules avec iwlist
        """
        test =IwList("un")
        inter=self.interface()
        listdico=test.iwList(inter[0])
        return listdico
### PARTIE INSERANT LES RESULTATS DANS LA BDD 

    def getIwc(self):
        """
        Recupere les parametres avec iwconfig
        """
        res=self.iwc()
        return res
    
    def getIwli(self):
        """
        Recupere les parametres avec iwlist
        """
        res=self.iwli()
        return res;

    def getIperf(self,param):
        """
        Recupere les donnees avec iperf
        """
        res=self.ipe(param)
        return res

    def config(self,param):
        """
        Recupere les parametres pour la configuration/connexion a l AP
        Maintenant INUTILE car on laisse networkmanager gerer le truc
        """
        #conf= ConfigLan("un")
        #inter=self.interface()
        #resultat=self.iwc()
        #param["interface"]=inter[0]
        #conf.configlan(param)

    # lancement d iperf
    def ipe(self,param):
        """
        Cette fonction lane a proprement parler iperf
        ----
        Factorisation avec getIperf ?
        """
        print param    
        testiperf=Iperf("un")
        result=testiperf.iperf(param)
        print result
        return result


if __name__=="__main__":
    param={}
    param["nom"]="test"
    param["mode"]="tcp"
    param["serveur"]="192.168.1.10"
    param["intervalle"]=1
    param["duree"]=10
    param["debit"]=11
    param["windows"]=8        
    test=Gestion("test")
    #test.config(param)
    #test.iwli()
    res=test.iwc()
    print res
    #print "LALALALALLALALALALALALAL"+str(res)
    #test.bddiwc()
    res=test.iwli()
    print res    
    #test.inserbddipe(param)
    #test.iwli()
    #test.ipe(param)


    
    
